package com.hx.setting.service;

import com.hx.setting.entity.Entity;
import com.hx.setting.model.Condition;
import com.hx.setting.model.GeneratedCriteria;
import com.hx.setting.model.Page;
import com.hx.setting.model.TableField;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * Generate Date : 2014-03-16
 * Generate Version : v3.0
 * Generate Name : Honey v3.1 Test
 * Generate User : THINK
 * JDK Version : 1.5
 */
public interface BaseService<E extends Entity, PK extends Serializable>
{

	/** 
	 * 根据条件查询记录集数量。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  int 返回查询数量
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public int count(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 使用数据库的exists函数判断查询条件是否有记录集。
	 * 在某些条件下可以替换in查询以提高查询效率。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  boolean true:有记录集 false:没有查到记录集
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public boolean exists(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 按照主键查询一条记录。
	 * @param  pk 主键
	 * @return  E 返回查询对象
	 */
	@SuppressWarnings("unchecked")
	public E selectByPrimaryKey(PK pk);

	/** 
	 * 查询所有的记录。。
	 * @return  java.util.List<E> 返回所有的记录集
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectAll();

	/** 
	 * 查询所有的记录。。
	 * @param  page {@code   com.hx.setting.model.Page} 分页对象
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Page
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectAll(Page page);

	/** 
	 * 动态条件查询记录。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByDynamic(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 动态条件查询记录。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @param  page {@code   com.hx.setting.model.Page} 分页对象
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 * @see    com.hx.setting.model.Page
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByDynamic(Condition<? extends GeneratedCriteria> search, Page page);

	/** 
	 * 按照字段查询
	 * @param field 字段名称
	 * @param value 字段值
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByField(Enum field, Object value);

	/** 
	 * 按照字段查询
	 * @param field 字段名称
	 * @param value 字段值
	 * @param page 分页
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByField(Enum field, Object value, Page page);

	/** 
	 * 按照多个字段与查询,字段数量和值的数量要一致.
	 * @param field 字段名称
	 * @param value 字段值
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByFields(Enum[] fields, Object[] values);

	/** 
	 * 按照多个字段与查询,字段数量和值的数量要一致.
	 * @param field 字段名称
	 * @param value 字段值
	 * @param page 分页
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectByFields(Enum[] fields, Object[] values, Page page);

	/** 
	 * 动态条件查询一条记录。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  E
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public E selectOneByDynamic(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 动态删除记录集。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  int
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public int deleteByDynamic(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 按照主键删除。
	 * @param  pk 主键
	 * @return  int 影响记录集
	 */
	@SuppressWarnings("unchecked")
	public int delete(PK pk);

	/** 
	 * 按照主键删除。
	 * @param  pk 主键
	 * @return  int 影响记录集
	 */
	@SuppressWarnings("unchecked")
	public int deleteByPrimaryKey(PK pk);

	/** 
	 * 添加新的记录。
	 * @param  entity {@code   E} 需要操作的实体
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int insert(E entity);

	/** 
	 * 插入不为空的记录,如果被插入的实体属性值等于null该值由数据库默认值填充。
	 * @param  entity {@code   E} 需要操作的实体
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int insertSelective(E entity);

	/** 
	 * 保存entity,如果entity中包含主键则更新实体,如果entity中不包含主键则插入实体。方法返回影响记录集的数量。
	 * @param  entity {@code   E} 需要操作的实体
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int save(E entity);

	/** 
	 * 更新记录集,主键和BLOB字段不被更新 。方法返回影响记录集的数量。
	 * @param  entity {@code   E} 需要操作的实体,实体中必须包含主键。
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int update(E entity);

	/** 
	 * 更新记录集,主键和BLOB字段不被更新 。方法返回影响记录集的数量。
	 * @param  entity {@code   E} 需要操作的实体,实体中必须包含主键。
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int updateByPrimaryKey(E entity);

	/** 
	 * 按照主键更新记录,主键不被更新.如果被更新的实体属性值等于null该值不被更新。方法返回 影响 记录集的数量。
	 * @param  entity {@code   E} 需要操作的实体
	 * @return  int 返回影响记录集数量
	 */
	@SuppressWarnings("unchecked")
	public int updateByPrimaryKeySelective(E entity);

	/** 
	 * 动态条件更新记录集,主键和Blob字段不被更新。如果被更新的实体属性值等于null该值不被更新。方法返回 影响 记录集的数量。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @param  entity {@code   E} 需要操作的实体
	 * @return  int 返回影响记录集数量
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	@SuppressWarnings("unchecked")
	public int updateByDynamicSelective(Condition<? extends GeneratedCriteria> search, E entity);

	/** 
	 * 动态条件更新记录集,主键和Blob字段不被更新。方法返回 影响 记录集的数量。
	 */
	@SuppressWarnings("unchecked")
	public int updateByDynamic(Condition<? extends GeneratedCriteria> search/*动态查询语句*/, E entity/*需要操作的实体*/);

	/** 
	 * 是否支持关联查询
	 */
	public boolean isSupportAssociationQuery();

	/** 
	 * 关联查询所有的记录。。
	 * @return  java.util.List<E> 返回所有的记录集
	 */
	public List<E> selectAllForAssociation();

	/** 
	 * 按照主键查询一条数据
	 * @return  E
	 */
	public E selectByPrimaryKeyForAssociation(PK pk);

	/** 
	 * 关联查询所有的记录。。
	 * @param  page {@code   com.hx.setting.model.Page} 分页对象
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Page
	 */
	@SuppressWarnings("unchecked")
	public List<E> selectAllForAssociation(Page page);

	/** 
	 * 按照字段关联查询,字段数量和值的数量要一致.
	 * @param field 字段名称
	 * @param value 字段值
	 * @param page 分页
	 * @return
	 */
	public List<E> selectByFieldForAssociation(Enum field, Object value, Page page);

	/** 
	 * 按照字段关联查询,字段数量和值的数量要一致.
	 * @param field 字段名称
	 * @param value 字段值
	 * @return
	 */
	public List<E> selectByFieldForAssociation(Enum field, Object value);

	/** 
	 * 按照多个字段与关联查询,字段数量和值的数量要一致.
	 * @param field 字段名称数组
	 * @param value 字段值数组
	 * @return
	 */
	public List<E> selectByFieldsForAssociation(Enum[] fields, Object[] values);

	/** 
	 * 按照多个字段与关联查询,字段数量和值的数量要一致.
	 * @param field 字段名称数组
	 * @param value 字段值数组
	 * @param page 分页
	 * @return
	 */
	public List<E> selectByFieldsForAssociation(Enum[] fields, Object[] values, Page page);

	/** 
	 * 动态条件查询记录。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 */
	public List<E> selectByDynamicForAssociation(Condition<? extends GeneratedCriteria> search);

	/** 
	 * 动态条件查询记录。
	 * @param  search {@code   com.hx.setting.model.Condition<? extends GeneratedCriteria>} 动态查询语句
	 * @param  page {@code   com.hx.setting.model.Page} 分页对象
	 * @return  java.util.List<E>
	 * @see    com.hx.setting.model.Condition<? extends GeneratedCriteria>
	 * @see    com.hx.setting.model.Page
	 */
	public List<E> selectByDynamicForAssociation(Condition<? extends GeneratedCriteria> search, Page page);

	/** 
	 * 获取数据库字段
	 * @param property
	 * @return
	 */
	public TableField getTableField(String property);
}
/* Honey v3.1 Test - version:1 - OriginalChecksum:Bf5d248107b33271f54b27a9fd7992aca (do not edit this line) */
